perm filename IMPSTA.MID[NET,MRC]3 blob
sn#347774 filedate 1978-04-07 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00011 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00002 00002 TITLE IMPSTAT
C00005 00003 Pointers into the monitor
C00007 00004 Start of program
C00010 00005 Set up display of IMP status
C00012 00006 Local socket, byte size, state
C00014 00007 Allocations
C00016 00008 PTY map
C00018 00009 Display it!
C00020 00010 Random stuff
C00022 00011 More randomness
C00023 ENDMK
C⊗;
TITLE IMPSTAT
SUBTTL Definitions
; Mark Crispin, SU-AI, April 1978
X=1 ? Y=2 ? Z=3 ? L=4 ? I=5 ? N=6 ? DDB=7 ? J=10 ? T=11 ? A=12 ? B=13 ? C=14 ? P=17
; GETLIN bits
IIILIN==400000,, ; terminal is a III
DMLIN== 040000,, ; terminal is a DM
DDDLIN==020000,, ; terminal is a DD
ILM== 020000 ; MPV occured
; Data Risc command word
DEFINE CW ?C1,B1,C2,B2,C3,B3
<<B1←28.>\<B2←20.>\<B3←12.>\<C1←9.>\<C2←6.>\<C3←3>\4>
TERMIN
; Data Risc command names
EXCT== 0 ; execute
FNCN== 1 ; function, usual value bytes
ALPHBG==6 ? ALPHA==46
CHNL== 2 ; channel select
COLM== 3 ; column select
HILIN== 4 ; set high 5 bits of line address
LOLIN== 5 ; set low 4 bits of line address
; IMP status bits
RFCS== 200000,, ; RFC sent
RFCR== 100000,, ; RFC received
CLSS== 040000,, ; CLS sent
CLSR== 020000,, ; CLS received
; IMP DDB stuff
DEVCHR==1 ; characteristics
DEVIOS==2 ; I/O status
ALLW== 020000,, ; allocation wait
MAL== 14 ; message allocation
BAL== 15 ; bit allocation
NHMA== 16 ; nominal message allocation
NHBA== 17 ; nominal bit allocation
HMA== 22 ; remote message allocation
HBA== 23 ; remote bit allocation
MIIL== 24 ; messages in input list
BIIL== 25 ; bits in input list
; Pointers into the monitor
FFLNK: 0 ; first free link
; IMP table pointers indexed by IMP index up by 1, so RH is addr-1
LNKTAB: (I) ; host-link number
IMPDDB: (I) ; address of DDB
IMPLS: (I) ; local socket number
IMPFS: (I) ; foreign socket number
IMPBS: (I) ; byte size
IMPSTB: (I) ; link status
; Pointers indexed by job number
PRJPRG: (J) ; PPN
JOBNAM: (J) ; program name
; Pointers indexed by PTY number
PTYJOB: (T) ; PTY mother
; Pointers indexed by TTY number
TTYTAB: (T) ; TTY DDB pointer
; Random data
PDLLEN==50.
PDL: BLOCK PDLLEN
LINCNT: BLOCK 1 ; line count
HDABLK: BLOCK 13 ; terminal location block
HSIZE: BLOCK 1 ; horizontal size
SUBTTL Start of program
IMPSTA: JFCL
RESET
LOCK ; ensure fast response
MOVE P,[PDL(-PDLLEN)]
; Make sure we never lose with MPV
MOVEI [ MOVE JOBREL
ADDI 2000 ; another K of core, please
CORE
JRST 4,IMPSTA
LOCK
JRST GETNET] ; restart status
MOVEM JOBAPR
MOVEI ILM
APRENB
; Snarf up some monitor symbols
MOVEI X,[.RSQZ 0,FFLNK ? 0]
.SYML X,
JRST 4,.-1
ADDI X,400000
MOVEM X,FFLNK
IRPS SYM,,LNKTAB IMPDDB IMPLS IMPFS IMPBS IMPSTB
MOVEI X,[.RSQZ 0,SYM ? 0]
.SYML X,
JRST 4,.-1
ADDI X,377777
HRRM X,SYM
TERMIN
; Map the monitor in
MOVSI 377777
SETPR2
JRST 4,.-1
; Get symbols with low core pointers the easy way
MOVE 400211 ; PRJPRG
ADDI 400000
HRRM PRJPRG
MOVE 400225 ; JOBNAM
ADDI 400000
HRRM JOBNAM
MOVE 400270 ; PTYJOB
ADDI 400000-121 ; indexed by PTY number
HRRM PTYJOB
MOVE 400220 ; TTYTAB
ADDI 400000
HRRM TTYTAB
MOVE J,400226 ; JOB
MOVE J,400000(J)
MOVE L,400236 ; JBTLIN
ADDI L,400000(J)
MOVE L,(L)
CAMN L,[-1]
EXIT ; punt if detached
MOVEI L,400000(L)
ADD L,400302 ; LINTAB
MOVE L,(L)
; Fool around with the page printer
HRROI [015000,,HSIZE]
TTYSET
PPSEL 1
DPYPOS -452 ; near botton of screen
DPYSIZ 3002 ; 3 glitches, 2 lines/glitch
; JRST GETNET
SUBTTL Set up display of IMP status
; Initialize statistics printer
GETNET: SETZM SCREEN
MOVE [SCREEN,,SCREEN+1]
BLT @JOBREL
MOVE X,[440700,,SCREEN]
SETZM LINCNT
TLNN (DMLIN)
JRST HDNODM
MOVEI 177
IDPB X
MOVEI ↑W
IDPB X
HDNODM: SKIPN @FFLNK
JRST [ JSP Y,TXTSTR
ASCIZ/ Nobody is using the IMP!/
PUSHJ P,TERPRI
JRST MSGEND]
MOVEI I,1
JSP Y,TXTSTR
ASCIZ/Ix Hst Lnk For'n skt Local skt BS Status Jb User Subsys Allocs/
PUSHJ P,TERPRI
; Individual link print routine
NXTLNK: MOVEI Y,-1(I)
MOVEI N,2
PUSHJ P,OCTOUT ; table index
MOVEI <" >
IDPB X
LDB Y,[101000,,@LNKTAB]
MOVEI N,3
PUSHJ P,OCTOUT ; host number
MOVEI <" >
IDPB X
LDB Y,[001000,,@LNKTAB]
MOVEI N,3
PUSHJ P,OCTOUT ; link number
MOVEI <" >
IDPB X
MOVE Y,@IMPFS ; foreign socket number
CAMN Y,[-1]
JRST [ JSP Y,TXTSTR
ASCIZ/ listening/
JRST DPYLS]
MOVEI N,11.
PUSHJ P,OCTOUT
; (continued on next page)
; Local socket, byte size, state
DPYLS: MOVEI <" >
IDPB X
MOVE Y,@IMPLS ; local socket number
MOVEI N,11.
PUSHJ P,OCTOUT
MOVEI <" >
IDPB X
MOVE Y,@IMPBS ; byte size
MOVEI N,2
PUSHJ P,DECOUT
MOVE @IMPSTB
TLNN (CLSS\CLSR)
JRST NOTCLS
TLNN (CLSS)
JRST [ JSP Y,TXTSTR
ASCIZ/ CLSFH /
JRST STADUN]
TLNN (CLSR)
JRST [ JSP Y,TXTSTR
ASCIZ/ CLSSNT/
JRST STADUN]
JSP Y,TXTSTR
ASCIZ/ CLOSED/
JRST STADUN
NOTCLS: TLNN (RFCS\RFCR)
JRST [ JSP Y,TXTSTR
ASCIZ/ LISTEN/
JRST STADUN]
TLNN (RFCS)
JRST [ JSP Y,TXTSTR
ASCIZ/ RFCFH /
JRST STADUN]
TLNN (RFCR)
JRST [ JSP Y,TXTSTR
ASCIZ/ RFCSNT/
JRST STADUN]
JSP Y,TXTSTR
ASCIZ/ OPENED/
; Start of DDB stuff
STADUN: SKIPN DDB,@IMPDDB
JRST NODDB ; no DDB for this guy
MOVEI <" >
IDPB X
MOVEI J,DEVCHR(DDB)
PEEK J, ; DDB's can be in upper 1/2 moby
LSH J,-30.
PUSHJ P,JOBOUT
MOVEI <" >
IDPB X
MOVEI Y,DEVIOS(DDB)
PEEK Y,
MOVEI "W
TLNE Y,(ALLW)
IDPB X
; (continued on next page)
; Allocations
MOVE @IMPLS
TRNN 1 ; send or receive?
JRST [ MOVEI Y,HMA(DDB) ; receive; foreign message allocation
PEEK Y,
PUSHJ P,DECOUT
MOVEI "/
IDPB X
MOVEI Y,HBA(DDB)
PEEK Y,
PUSHJ P,DECOUT
MOVEI Y,MIIL(DDB) ; messages in input list
PEEK Y,
JUMPE Y,NODDB
MOVEI <" >
IDPB X
MOVEI "[
IDPB X
PUSHJ P,DECOUT
MOVEI "/
IDPB X
MOVEI Y,BIIL(DDB) ; bits in input list
PEEK Y,
PUSHJ P,DECOUT
MOVEI "]
IDPB X
JRST NODDB]
MOVEI Y,MAL(DDB) ; send socket; message allocation
PEEK Y,
PUSHJ P,DECOUT ; note N←-1 from last DECOUT call
MOVEI "/
IDPB X
MOVEI Y,BAL(DDB) ; bit allocation
PEEK Y,
PUSHJ P,DECOUT
MOVEI <" >
IDPB X
NODDB: PUSHJ P,TERPRI
CAMGE I,@FFLNK
AOJA I,NXTLNK
; (continued on next page)
SUBTTL PTY map
LDB T,[001100,,400221] ; number of PTY's
HRLOI T,-1(T)
EQVI T,121 ; first PTY
SKIPN J,@PTYJOB
AOBJN T,.-1
JUMPE J,MSGEND
MOVEI <" >
IDPB X
PUSHJ P,TERPRI
JSP Y,TXTSTR
ASCIZ/PTY CJ CUsr CSbsys SJ SUsr SSbsys Location/
PUSHJ P,TERPRI
JRST PTYFND
PTYLUP: SKIPN J,@PTYJOB
JRST NXTPTY
PTYFND: MOVEI N,3
PUSH P,J
MOVEI Y,(T)
PUSHJ P,OCTOUT
MOVEI <" >
IDPB X
PUSHJ P,JOBOUT
HRRZ J,@TTYTAB
ADDI J,DEVCHR&377777
PEEK J, ; cretin TTY DDB's may be in upper
LDB J,[360600,,J] ; 128K!
JUMPE J,[ JSP Y,TXTSTR
ASCIZ/ /
JRST GETLOC]
MOVEI <" >
IDPB X
PUSHJ P,JOBOUT
MOVEI <" >
IDPB X
GETLOC: POP P,A ; try for TELSER's 137 convention
HRROI B,137
MOVEI C,B
MOVEI A
JOBRD
JRST NTELSR
JUMPE B,NTELSR
TLNE B,-1
JRST NTELSR
HRLI B,-13
MOVEI C,HDABLK
JOBRD
JRST NTELSR
MOVE HDABLK
CAME ['TERMID]
JRST NTELSR
SKIPA Y,[440700,,HDABLK+1]
IDPB X
ILDB Y
JUMPN .-2
NTELSR: PUSHJ P,TERPRI
NXTPTY: AOBJN T,PTYLUP
; Went through all the links
MSGEND: MOVE Z,HSIZE
TLNE L,(DDDLIN\DMLIN)
CLREOF: CAMG Z,LINCNT
JRST NODDDM ; III or printing
MOVEI <" >
IDPB X
PUSHJ P,TERPRI
SOJA Z,CLREOF
; (continued on next page)
SUBTTL Display it!
NODDDM: TLNN X,700000 ; if at word boundry
ADDI X,1
SETZM 1(X) ; HALT to stop program
MOVEI X,(X)
MOVEI 2(X)
SUBI DPPROG
MOVEM DPHEAD+1 ; save display program length
AOS (X)
CAIE X,SCREEN
SOJA X,.-2
; Now output the accumulated text
TLNN L,(DDDLIN\IIILIN\DMLIN)
JRST [ OUTSTR SCREEN
OUTSTR [ASCIZ/
/]
JRST DELAY]
JUMPL L,DOIII
TLNE L,(DMLIN)
JRST [ SETZM DPPROG
MOVE X,[.BYTE 7 ? 177 ? ↑L ? 140 ? 142]; cursor at third line
JRST DODM]
MOVE TXTOUT
MOVEM DPPROG
SKIPA X,COLPOS
DOIII: MOVE X,[.BYTE 11.,11.,3,3,2,2,4 ? -777 ? 640 ? 2 ? 3 ? 1 ? 2 ? 6]
DODM: MOVEM X,DPPROG+1
UPGIOT 1,DPHEAD ; display the text
; Done, wait a while and go again
DELAY: MOVEI 20.
TLNE L,(DDDLIN\IIILIN)
MOVEI 1
TLNE L,(DMLIN)
MOVEI 5.
SLEEP
SNEAKS
JRST GETNET
CAIE ↑M
JRST DELAY1
INCHRW ; only eat CRLF's
INCHRW
DELAY1: UNLOCK
HRROI [004000,,400\"N]
TTYSET
EXIT 1,
JRST IMPSTA
SUBTTL Random stuff
TERPRI: JSP Y,TXTSTR
ASCIZ/
/
AOS LINCNT
TLNN (DMLIN)
POPJ P,
MOVEI 177
IDPB X
MOVEI ↑W
IDPB X
POPJ P,
; Octal/decimal output of Y. If N > 0, pad with spaces so it fits in N digits
DECOUT: SKIPA Z,[10.]
OCTOUT: MOVEI Z,8.
HRRM Z,NUMOUT ; I don't want to fry another AC
NUMOUT: IDIVI Y,
ADDI Z,"0
PUSH P,Z
SOSG N
JRST NUMOU1
JUMPN Y,NUMOU2
MOVEI Z,<" >
IDPB Z,X
SOJG N,.-1
JRST NUMOU3
NUMOU1: SKIPE Y
NUMOU2: PUSHJ P,NUMOUT
NUMOU3: POP P,Y
IDPB Y,X
POPJ P,
; Job number/PPN/name output
JOBOUT: MOVEI N,2
MOVEI Y,(J)
PUSHJ P,DECOUT
MOVEI <" >
IDPB X
MOVE Y,@PRJPRG
PUSHJ P,SIXOUT
MOVEI <" >
IDPB X
MOVE Y,@JOBNAM
; JRST SIXOUT
; More randomness
; Sixbit output routine
SIXOUT: MOVEI N,6
SETZ Z,
ROTC Y,6
ADDI Z,"A-'A
IDPB Z,X
SOJG N,SIXOUT+1
POPJ P,
; Output text string, called with JSP
TXTSTR: HRLI Y,440700
ILDB Y
JUMPE 1(Y)
IDPB X
JRST TXTSTR+1
...LIT: CONSTA
; Display program stuff
COLPOS: CW COLM,2,HILIN,1,LOLIN,10 ; second column, third line
TXTOUT: CW FNCN,ALPHA,CHNL,0,FNCN,ALPHA ; text output
DPHEAD: 200000,,DPPROG ; double field mode
0 ; size
0
DPPROG+1 ; address of low order line select for DD
DPPROG: BLOCK 2 ; some space
SCREEN: 0 ; display screen image
END IMPSTAT